package system.task;

import system.task.logger.TaskLoggerWriter;

import java.util.List;

public interface TaskLogger extends AutoCloseable {

    /**
     * 获取执行ID
     *
     * @return
     */
    String getRunId();

    String getPath();

    boolean hasContent();

    /**
     * 设置附加时间前缀格式
     *
     * @return
     */
    void setPrefixTime(String format);

    boolean isEnabled();

    /**
     * 写入数据
     *
     * @param var1
     */
    void write(String var1);

    /**
     * 写入数据，支持格式化
     *
     * @param var1
     * @param format
     */
    default void write(String var1, Object... format) {
        if (this.isEnabled()) {
            String var = String.format(var1, format);
            this.write(var);
        }
    }

    /**
     * 写入一行数据
     *
     * @param var1
     */
    void writeln(String var1);

    /**
     * 写入一个空行
     */
    default void writeln() {
        this.writeln("");
    }

    /**
     * 写入一行，支持格式化
     *
     * @param var1
     * @param format
     */
    default void writeln(String var1, Object... format) {
        if (this.isEnabled()) {
            String var = String.format(var1, format);
            this.writeln(var);
        }
    }

    /**
     * 写入错误数据
     *
     * @param var1
     */
    void error(String var1);

    /**
     * 写入错误数据
     *
     * @param var1
     */
    default void error(String var1, Object... format) {
        if (this.isEnabled()) {
            error(String.format(var1, format));
        }
    }

    /**
     * 写入一个异常消息
     *
     * @param var1
     * @param e
     * @param format
     */
    default void error(String var1, Throwable e, Object... format) {
        if (this.isEnabled()) {
            error(String.format(var1, format));
            if (e != null) {
                error(e.toString());
            }
        }
    }

    /**
     * 写入一个异常消息
     *
     * @param var1
     * @param e
     */
    default void error(String var1, Throwable e) {
        if (this.isEnabled()) {
            error(var1);
            if (e != null) {
                error(e.toString());
            }
        }
    }

    /**
     * 获取其它日志写书器
     *
     * @return
     */
    List<TaskLoggerWriter> getLogWriters();
}
